// 1. 引入Node.js内置的"events"模块，获取EventEmitter构造函数
const EventEmitter = require('events').EventEmitter;
// 2. 引入Node.js内置的"util"模块，用于实现构造函数继承
const util = require('util');

// 3. 定义Dog构造函数，接收name（狗名）和energy（初始精力值）
function Dog(name, energy) {
  // 4. 调用EventEmitter的构造函数，确保继承EventEmitter的属性和方法（关键步骤，避免继承不完整）
  EventEmitter.call(this);
  // 5. 初始化Dog实例的属性：name（狗名）、energy（精力值）、timer（定时器标识，用于后续清除定时器）
  this.name = name;
  this.energy = energy;
  this.timer = null; // 用于存储setInterval返回的定时器ID
}

// 6. 实现继承：让Dog构造函数继承EventEmitter的原型方法（如on、emit等）
util.inherits(Dog, EventEmitter);

// 7. 给Dog原型添加startBark方法：开始“叫”的逻辑（每隔1秒叫一次，精力值减1）
Dog.prototype.startBark = function() {
  const self = this; // 保存当前Dog实例的this指向（避免定时器内this丢失）
  
  // 8. 设置定时器：每隔1000毫秒（1秒）执行一次回调函数
  this.timer = setInterval(function() {
    // 9. 判断精力值是否大于0：若大于0则继续叫，否则停止
    if (self.energy > 0) {
      // 10. 输出“叫”的信息（格式与实验效果一致）
      console.log(`${self.name} barked! energy: ${self.energy}`);
      // 11. 精力值减1
      self.energy -= 1;
    } else {
      // 12. 精力值为0时，清除定时器（停止叫），并输出停止提示（可选，增强可读性）
      clearInterval(self.timer);
      console.log(`${self.name} has no energy to bark anymore!`);
    }
  }, 1000); // 定时器间隔：1000毫秒（1秒）
};

// 13. 导出Dog构造函数，供其他文件（如dogBark.js）引入使用
module.exports = Dog;